Conversation
… (Amara action #3) Amara's 4th courier ferry (PR #221) proposed the decision-proxy- evidence record format as action item #3 in her Stabilize stage. This PR lands the schema v0, companion template, and one retroactive worked example. The hard rule across all 4 Amara ferries (PRs #196 / #211 / #219 / #221): "never say Amara reviewed something unless Amara actually reviewed it through a logged path" This directory IS the logged path. Each .yaml records one proxy- mediated decision — authority basis, consulted memory files, live-state checks performed, disagreements, peer review status. What landed: - docs/decision-proxy-evidence/README.md — schema v0 + field semantics + when to write a record + naming convention (YYYY-MM-DD-DP-NNN-<slug>.yaml) + relationship to ADRs / commit messages / PR bodies / CONTRIBUTOR-CONFLICTS.md + explicit "what this is NOT" list. - docs/decision-proxy-evidence/_template.yaml — fillable template with all required + optional fields, inline examples commented. - docs/decision-proxy-evidence/2026-04-23-DP-001-acehack- branch-protection-minimal.yaml — retroactive worked example documenting the Otto-66 AceHack branch protection decision. authority_level=retroactive flags this is a backfill. Schema fields: decision_id / timestamp_utc / requested_by / proxied_by / task_class / authority_level / escalation_required / repo_canonical / head_commit / model (with vendor + snapshot + prompt_bundle_hash + loaded_memory_files) / consulted_views / consulted_memory_ids / live_state_checks / decision_summary / disagreements / outputs_touched / review / retraction_of / follow_up_evidence / notes. Task classes: backlog-shaping / settings-change / branch-shaping / roadmap-edit / scope-claim / governance-edit / memory-migration / other. Per-task-class peer-review defaults documented; settings-change / branch-shaping / scope-claim default to peer_review_required=true. Not retroactive for all 20+ session PRs — would be make-work. Backfilling selectively when downstream questions benefit. Not gated yet — v0 is voluntary; CI enforcement is Amara's Determinize-stage work (separate PR, later). Amara's "deterministic reconciliation" framing (endorsed Otto-67) applies: this is the mechanism that makes proxy claims auditable by default. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d889cf8035
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| **Stage:** Stabilize (Otto-67 Amara 4th ferry absorb, PR #221) | ||
| **Companion template:** [`_template.yaml`](_template.yaml) | ||
| **External-maintainer-decision-proxy ADR:** `docs/DECISIONS/2026-04-22-external-maintainer-decision-proxy-adr.md` |
There was a problem hiding this comment.
Fix ADR path to existing decision-proxy pattern doc
This reference points to docs/DECISIONS/2026-04-22-external-maintainer-decision-proxy-adr.md, which does not exist in the repo, so readers cannot reach the normative ADR from this schema document. Because this file is establishing the audit trail contract, a broken authority link weakens traceability and makes it easy to apply the format against the wrong source decision.
Useful? React with 👍 / 👎.
| - **`escalation_required`** — boolean; `true` when this row | ||
| needs human maintainer acknowledgment before `status` | ||
| can move to `landed` |
There was a problem hiding this comment.
Define status field for escalation lifecycle
The schema text says escalation_required controls when status can move to landed, but no status field is defined anywhere in required/optional fields or in the template. For any escalated decision, this makes the lifecycle state unrepresentable and will force authors to invent inconsistent out-of-band tracking.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
Adds a v0 “decision-proxy evidence” documentation substrate intended to make proxy-mediated decision claims auditable via structured YAML records and a worked example.
Changes:
- Introduces
docs/decision-proxy-evidence/README.mddefining the v0 schema, naming convention, and integration points. - Adds
docs/decision-proxy-evidence/_template.yamlas a fillable record template. - Adds a retroactive worked example record for AceHack branch protection (
2026-04-23-DP-001-...yaml).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| docs/decision-proxy-evidence/README.md | Defines the decision-proxy-evidence schema and how it should be used. |
| docs/decision-proxy-evidence/_template.yaml | Provides a copyable YAML template for new evidence records. |
| docs/decision-proxy-evidence/2026-04-23-DP-001-acehack-branch-protection-minimal.yaml | Supplies a seeded example record documenting a past decision. |
| requested_by: Aaron # human maintainer | ||
| proxied_by: Otto # Amara | Otto | Kenji | other persona | ||
| task_class: other # backlog-shaping | settings-change | branch-shaping | roadmap-edit | scope-claim | governance-edit | memory-migration | other | ||
| authority_level: proposed # delegated | proposed | escalated | retroactive |
There was a problem hiding this comment.
P1: The template hard-codes contributor names (e.g., requested_by: Aaron, proxied_by: Otto). This conflicts with the repo’s operational standing rule “No name attribution in code, docs, or skills” (docs/AGENT-BEST-PRACTICES.md:284-290). Consider switching these fields to role references (e.g., human_maintainer, architect, external_ai_maintainer) or explicitly documenting/ratifying a carve-out for decision-proxy-evidence records so this directory doesn’t become a policy exception by accident.
| consulted_memory_ids: | ||
| - feedback_agent_owns_all_github_settings_and_config_all_projects_zeta_frontier_poor_mans_mode_default_budget_asks_require_scheduled_backlog_and_cost_estimate_2026_04_23 | ||
| - feedback_lfg_free_actions_credits_limited_acehack_is_poor_man_host_big_batches_to_lfg_not_one_for_one_2026_04_23 | ||
| - feedback_honor_those_that_came_before | ||
|
|
There was a problem hiding this comment.
P0: consulted_memory_ids includes memory slugs that don’t appear to exist under memory/ (e.g., feedback_lfg_free_actions_credits_limited_acehack_is_poor_man_host_big_batches_to_lfg_not_one_for_one_2026_04_23 and feedback_honor_those_that_came_before). Since this file is meant to be an auditable evidence record, these should either be corrected to existing memory IDs (matching actual filenames/slugs) or the missing memory files should be added in the same PR.
| conflict_row: null | ||
|
|
||
| outputs_touched: | ||
| - memory/project_acehack_branch_protection_minimal_applied_prior_zeta_archaeology_inconclusive_2026_04_23.md |
There was a problem hiding this comment.
P0: outputs_touched references memory/project_acehack_branch_protection_minimal_applied_prior_zeta_archaeology_inconclusive_2026_04_23.md, but that file doesn’t exist under memory/. Either update this to the correct existing path, or add the referenced memory file; otherwise the worked example contains a broken pointer in one of its key provenance fields.
| - memory/project_acehack_branch_protection_minimal_applied_prior_zeta_archaeology_inconclusive_2026_04_23.md |
|
|
||
| **Stage:** Stabilize (Otto-67 Amara 4th ferry absorb, PR #221) | ||
| **Companion template:** [`_template.yaml`](_template.yaml) | ||
| **External-maintainer-decision-proxy ADR:** `docs/DECISIONS/2026-04-22-external-maintainer-decision-proxy-adr.md` |
There was a problem hiding this comment.
P1: The referenced ADR path docs/DECISIONS/2026-04-22-external-maintainer-decision-proxy-adr.md does not exist in the repo (the closest match is docs/DECISIONS/2026-04-23-external-maintainer-decision-proxy-pattern.md). Update this reference so readers can navigate to the actual ADR/pattern document.
| **External-maintainer-decision-proxy ADR:** `docs/DECISIONS/2026-04-22-external-maintainer-decision-proxy-adr.md` | |
| **External-maintainer-decision-proxy ADR:** `docs/DECISIONS/2026-04-23-external-maintainer-decision-proxy-pattern.md` |
| all dates for now since volume is low) | ||
| - `<slug>` — short kebab-case identifier of the decision | ||
|
|
||
| Example: `docs/decision-proxy-evidence/2026-04-24-DP-001-acehack-branch-protection-minimal.yaml` |
There was a problem hiding this comment.
The filename example uses DP-001 on 2026-04-24, but this PR already introduces 2026-04-23-DP-001-.... Keeping the example in sync with the actual first record (or using a different DP number) will prevent confusion about whether IDs are global-monotonic vs per-date.
| Example: `docs/decision-proxy-evidence/2026-04-24-DP-001-acehack-branch-protection-minimal.yaml` | |
| Example: `docs/decision-proxy-evidence/2026-04-24-DP-002-acehack-branch-protection-minimal.yaml` |
| - **Amara's 4 courier ferries** are not themselves | ||
| decision-proxy records — they are proposals. Decisions | ||
| made BASED ON those ferries should cite them via | ||
| `consulted_memory_ids` pointing to the absorb docs | ||
| (`docs/aurora/2026-04-23-amara-*.md`). |
There was a problem hiding this comment.
P1: This section asserts there are "4 courier ferries" and points to docs/aurora/2026-04-23-amara-*.md, but currently only two matching Amara absorb docs exist under docs/aurora/. Either add the missing absorb docs referenced in the PR description or adjust the wording to match what is actually present in the tree so the documentation doesn’t drift.
| - **Amara's 4 courier ferries** are not themselves | |
| decision-proxy records — they are proposals. Decisions | |
| made BASED ON those ferries should cite them via | |
| `consulted_memory_ids` pointing to the absorb docs | |
| (`docs/aurora/2026-04-23-amara-*.md`). | |
| - **Amara's courier ferries** are not themselves | |
| decision-proxy records — they are proposals. Decisions | |
| made BASED ON those ferries should cite them via | |
| `consulted_memory_ids` pointing to the relevant absorb | |
| docs under `docs/aurora/`. |
…(Amara action #2) (#223) Amara's 4th ferry (PR #221) action item #2: pin Claude model snapshot + loaded memory state + prompt bundle hash so "Claude" is not a moving target across model version shifts (3.5 → 3.7 → 4 → 4.x all have materially different system-prompt bundles + knowledge cutoffs + memory-retention language per archived Drive artifacts). Three-part scaffolding (v0): 1. tools/hygiene/capture-tick-snapshot.sh - Captures mechanically-accessible state: * Claude Code CLI version (`claude --version`) * CLAUDE.md + AGENTS.md + memory/MEMORY.md SHAs * Memory index byte count * Git HEAD + branch + repo * Date UTC * Per-user ~/.claude/CLAUDE.md SHA if present - Outputs YAML (default) or JSON (`--json`) - Agent fills model_snapshot + prompt_bundle_hash from session context (not CLI-accessible today) 2. docs/hygiene-history/session-snapshots.md - Session-level + significant-event pins (not per-tick) - Append-only row format: session_id / captured_utc / event (session-open | mid-session-pin | session-close | compaction) / agent / model / CLI version / git state / files SHAs / notes / prompt_bundle_hash - Seeded with one mid-session-pin for this tick's Otto-70 capture (the session has been running ~70 ticks; actual session-open is earlier and unreachable for pins) 3. docs/hygiene-history/loop-tick-history.md schema extension - New "On snapshot pinning" subsection documenting the relationship: per-tick pins optional + inline in `notes`; session-level pins go in the sidecar file. - Snapshot capture is discipline, not gate — don't slow the autonomous-loop tick-close for every fire. What the snapshot does NOT capture yet: - model_snapshot — known to the agent from session context, not exposed by `claude --version` (which gives CLI version only). Agent fills. - prompt_bundle_hash — no current tool reconstructs the system prompt bundle. Placeholder null until such a tool lands. Amara's Determinize-stage work potentially. - Active permissions / skill set — session-specific; not captured in v0. First run of the tool on this branch surfaced a separate drift: memory/MEMORY.md is at 58842 bytes (~58KB, over the FACTORY-HYGIENE row #11 24976-byte cap). Not fixed in this PR — known-separately tracked drift. Amara Stabilize-stage: 3/3 landed (with this PR). ✓ Action #3 — decision-proxy-evidence schema (PR #222) ✓ Action #4 — branch-chat non-canonical framing (PR #222) ✓ Action #2 — snapshot pinning scaffolding (this PR) "Deterministic reconciliation" framing (Otto-67 endorsement): snapshot pinning is the mechanism that reconciles "what Claude knew" with "what Claude did" across time — essential for any future audit, tuning, or Amara-style drift analysis. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…BP-25 promotion candidate (#224) Amara's 4th ferry (PR #221 absorb) Determinize-stage item: document "live-state-before-policy" as an explicit rule. The decision-proxy-evidence schema (PR #222) already has the `live_state_checks:` field that enforces it per-record; this PR adds the explicit principle section + candidates the rule for BP-25 promotion. What landed: 1. docs/decision-proxy-evidence/README.md — new section "Live-state-before-policy" covering: - Why the rule exists (Amara's HB-004 commit-sample showing same-day propose-from-symptoms → policy-stance → empirical- correction) - How the schema enforces it (live_state_checks: required for settings-change and branch-shaping task classes; examples from DP-001 worked record) - Scope (settings / branch-shaping / authority claims / roadmap assumptions) - What's excluded (pure reads, mechanical fixes) - BP-NN promotion candidacy note 2. docs/BACKLOG.md — new P2 row candidating BP-25 promotion via ADR. Aarav's call per BP-NN-promotion-cadence FACTORY-HYGIENE row. Rule text candidate provided; owner mapped to Aarav + Kenji + Rune; effort S. Not a unilateral promotion — just the candidate row. Promotion requires Aarav ADR drafting. Amara's Determinize-stage progress: 1/5 (this PR). ✓ Live-state-before-policy schema-enforcement + BP candidate Remaining: - Memory reference-existence lint (S) - Memory duplicate-title lint enforcement (partial via #220/AceHack#12) - Generated CURRENT-*.md views (L) - Memory reconciliation algorithm (L) Per Aaron Otto-72: "don't wait on me approved, mark down your decisions". This PR acts under standing authority (Otto-67 full GitHub grant); BP-25 consideration is logged as BACKLOG candidate for Aarav's promotion call. Frontier UI (future, Otto-63) will be Aaron's batch-review surface. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…phase sequence, Aminata blocking gate) (#233) Aaron Otto-76 named-agent-email-ownership directive crystallises three memory layers + task #240 into an executable path: - 2026-04-20 four hard rules (never Aaron address; disclose agent-not-human; name project + why-contacted; recipient-UX- first). - 2026-04-22 two-lanes + standing Playwright signup authorisation + free-tier constraint + provider-choice autonomy. - 2026-04-23 autonomy-envelope with email carve-out (agents own their email; parallel ownership allowed; aaron_bond@yahoo.com test target; "don't be a dick" soft constraint). - Task #240 signup-terrain mapping (complete). Five explicit phase gates: - Phase 0: complete (signup terrain mapped). - Phase 1: persona-email-identity design doc (8 questions — persona choice, handle, provider, recovery cascade, 2FA, lanes, signature, reputation posture). - Phase 2: Aminata threat-model pass (BLOCKING gate — new attack surface, recovery abuse, phishing attribution, employer-policy interaction). - Phase 3: Playwright signup execution (bounded; single persona, single provider, DP-NNN.yaml evidence record). - Phase 4: Test send to aaron_bond@yahoo.com. - Phase 5: Memory capture + BP-NN promotion review. Scope limits explicit: - Does NOT authorise execution this tick. - Does NOT authorise email use bypassing maintainer visibility. - Does NOT allow parallel acquisition without explicit Phase 1 design choice. - Does NOT bypass Aminata blocking gate. Composes with: PR #230 (multi-account Phase-2 gating is sibling pattern); PR #231 (Codex is harness-neutral); decision-proxy-evidence (PR #222) for Phase 3 records; persona roster for persona-choice question. Filed under `## P2 — research-grade`. Effort M total; spread across 3-5 ticks. Otto-77 tick deliverable.
…rows (Amara Govern-stage 1/2) Amara's 4th ferry (PR #221 absorb) named populating docs/CONTRIBUTOR-CONFLICTS.md as the Govern-stage action: the schema has existed since PR #166 but the Resolved table was empty despite multiple session-observed contributor-level disagreements that closed with evidence. Backfills three genuine contributor-level conflicts observed this session (narrow scope — not maintainer-directives, which are out-of-scope per the schema's contributor-level disagreement definition): - CC-001: Copilot (PR reviewer) vs Aaron on no-name-attribution rule scope (history-file exemption). Resolved in Aaron's favor via Otto-52 clarification; policy BACKLOG row filed in PR #210. - CC-002: Amara (4th ferry) vs Otto (pre-Otto-67 pattern) on Stabilize-vs-keep-opening-new-frames. Resolved in Amara's favor; Otto pivoted at Otto-68 to execute her roadmap; 3/3 Stabilize + 3/5 Determinize landed via PRs #222/#223/#224/#225/#226. - CC-003: Codex (PR reviewer) vs Otto (initial framing) on citing-absent-artifacts. Resolved in Codex's favor via fix commits 29872af/1c7f97d on PRs #207/#208; pattern now discipline (distinguish merged-on-main from proposed-in-PR-open). All three rows follow the schema's 8-column layout and include the full Resolution-so-far / Scope / Source cells the schema requires. No retroactive Aaron→human-maintainer sweep of prior rows; schema's rule 1 (resolutions are additive) honored. This is 1/2 of Amara's Govern-stage work. 2/2 is the authority-envelope + escalation-path ADR (deferred, M-effort). Part of Amara's 4-stage remediation roadmap (Stabilize → Determinize → Govern → Assure). Otto-75 tick.
…rows (Amara Govern 1/2) (#227) * govern: CONTRIBUTOR-CONFLICTS backfill — 3 resolved session-observed rows (Amara Govern-stage 1/2) Amara's 4th ferry (PR #221 absorb) named populating docs/CONTRIBUTOR-CONFLICTS.md as the Govern-stage action: the schema has existed since PR #166 but the Resolved table was empty despite multiple session-observed contributor-level disagreements that closed with evidence. Backfills three genuine contributor-level conflicts observed this session (narrow scope — not maintainer-directives, which are out-of-scope per the schema's contributor-level disagreement definition): - CC-001: Copilot (PR reviewer) vs Aaron on no-name-attribution rule scope (history-file exemption). Resolved in Aaron's favor via Otto-52 clarification; policy BACKLOG row filed in PR #210. - CC-002: Amara (4th ferry) vs Otto (pre-Otto-67 pattern) on Stabilize-vs-keep-opening-new-frames. Resolved in Amara's favor; Otto pivoted at Otto-68 to execute her roadmap; 3/3 Stabilize + 3/5 Determinize landed via PRs #222/#223/#224/#225/#226. - CC-003: Codex (PR reviewer) vs Otto (initial framing) on citing-absent-artifacts. Resolved in Codex's favor via fix commits 29872af/1c7f97d on PRs #207/#208; pattern now discipline (distinguish merged-on-main from proposed-in-PR-open). All three rows follow the schema's 8-column layout and include the full Resolution-so-far / Scope / Source cells the schema requires. No retroactive Aaron→human-maintainer sweep of prior rows; schema's rule 1 (resolutions are additive) honored. This is 1/2 of Amara's Govern-stage work. 2/2 is the authority-envelope + escalation-path ADR (deferred, M-effort). Part of Amara's 4-stage remediation roadmap (Stabilize → Determinize → Govern → Assure). Otto-75 tick. * govern: annotate CC-002/CC-003 Source cells — PR #221/#219 open, not yet on main Applies CC-003's own discipline (cite-as-open-not-landed) to CC-002 and CC-003 themselves. Both rows cited `docs/aurora/2026-04-23-amara-memory-drift-*` and `docs/aurora/2026-04-23-amara-decision-proxy-*` without the "not yet on main" marker — the files are added by PRs #221 / #219 which are still open. Drain for PR #227 review threads PRRT_kwDOSF9kNM59RFIx and PRRT_kwDOSF9kNM59RFJE (dangling file refs at lines 132, 133). * fix: markdownlint auto-fixes on governance doc Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Amara's 4th ferry (PR #221) Stabilize-stage: two sibling actions land together. Both operationalize parts of the "logged path" + "canonical transport" discipline the hard rule requires.
Action #3 — Decision-proxy-evidence schema (Otto-68)
The logged path the hard rule names. Every proxy-mediated decision gets a
DP-NNN.yamlrecord tracing authority, consulted memory, live-state checks, peer review.docs/decision-proxy-evidence/README.md— schema v0 + field semantics + naming convention + integration with existing substratedocs/decision-proxy-evidence/_template.yaml— fillable templatedocs/decision-proxy-evidence/2026-04-23-DP-001-acehack-branch-protection-minimal.yaml— retroactive worked exampleAction #4 — Branch-chat non-canonical framing (Otto-69 addendum)
Added addendum to
docs/protocols/cross-agent-communication.mdsharpening the existing "branching is unstable infrastructure" positioning with Amara's 4th-ferry context:docs/aurora/*.mdabsorb →decision-proxy-evidence/DP-NNN.yamlif action changesRespects "Primary authorship credit stays with Amara" rule — addendum is downstream absorption notes; her original protocol sections 1-5 remain authoritative.
Why bundled
Both actions are Stabilize-stage per Amara's 4-stage roadmap, both operationalize proxy discipline, both touch the communication / evidence substrate. Conceptually one unit: the logged path (schema) + the not-to-trust transport (branch-chat framing).
Amara Stabilize progress
What this PR is NOT
Test plan
🤖 Generated with Claude Code